package br.com.diego.system.controller.cadastropermissao;

import br.com.diego.system.entity.componente.Componente;
import br.com.diego.system.entity.permissao.Permissao;
import br.com.diego.system.entity.permissao.Tipo;
import br.com.diego.system.entity.usuario.Usuario;
import br.com.diego.system.manager.componente.ComponenteManager;
import br.com.diego.system.manager.permissao.PermissaoManager;
import br.com.diego.system.manager.usuario.UsuarioManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;

public class CadastroPermissaoBuilder {

    @Autowired
    private PermissaoManager permissaoManager;
    
    @Autowired
    private UsuarioManager usuarioManager;
    
    @Autowired
    private ComponenteManager componenteManager;
    
    @Autowired
    private CadastroPermissaoFactory cadastroPermissaoFactory;
    
    private Permissao permissao;
    
    private Usuario usuario;
    
    private Componente componente;
    
    public void buildSalvar(CadastroPermissaoVo cadastroPermissaoVo) {        
        Assert.notNull(cadastroPermissaoVo, "Cadastro de Permissão esta vazio.");
        Assert.notNull(cadastroPermissaoVo.getPermissaoVo().getUsuarioVo(), "Usuário é um campo obrigatório.");
        Assert.notNull(cadastroPermissaoVo.getPermissaoVo().getComponenteVo(), "Componente é um campo obrigatório.");
        
        permissao = new Permissao();
        
        if (cadastroPermissaoVo.getPermissaoVo().getId() != null) {
            permissao = permissaoManager.buscarPeloId(cadastroPermissaoVo.getPermissaoVo().getId());
            Assert.notNull(permissao.getId(), "Permissão não encontrado no banco de dados.");
            permissao.setVersion(cadastroPermissaoVo.getPermissaoVo().getVersion());            
        }
        
        usuario = usuarioManager.buscarPeloId(cadastroPermissaoVo.getPermissaoVo().getUsuarioVo().getId());
        permissao.setUsuario(usuario);
        
        componente = componenteManager.buscarPeloId(cadastroPermissaoVo.getPermissaoVo().getComponenteVo().getId());
        permissao.setComponente(componente);

        permissao.setTipo(Tipo.valueOf(cadastroPermissaoVo.getPermissaoVo().getTipoVo().name()));
        
        permissaoManager.salvar(permissao);
    }

    public void buildDeletar(PermissaoVo permissaoVo) {
        Assert.notNull(permissaoVo.getId(), "Permissão não encontrado.");
        permissao = new Permissao();
        permissao = permissaoManager.buscarPeloId(permissaoVo.getId());
        Assert.notNull(permissao.getId(), "Permissão não pertence a base de dados.");
        permissaoManager.deletar(permissao);
    }
}
